package org.ttitfly.workflow;

import java.util.Stack;

/**
 * 会话保持器
 * 
 * <pre>
 * 维护当前连接的Session，并提供静态方法用于获取当前连接的Session
 * </pre>
 * 
 * @author 潘海春
 * @version 2009-1-12
 */
public class SessionHolder {

	/**
	 * 会话栈线程变量保持
	 */
	private static ThreadLocal<Stack<Session>> sessionStackLocal = new ThreadLocal<Stack<Session>>();

	/**
	 * 获取当前操作的session
	 * 
	 * @return
	 */
	public static Session currentSession() {
		Stack<Session> sessionStack = sessionStackLocal.get();
		if (sessionStack == null || sessionStack.isEmpty()) {
			return null;
		}
		// 弹出栈顶(最近申请)的会话
		return sessionStack.peek();
	}

	/**
	 * 获取当前的会话栈
	 * 
	 * @return
	 */
	protected Stack<Session> currentSessionStack() {
		return sessionStackLocal.get();
	}

	/**
	 * 初始化当前会话栈
	 * 
	 * @param sessionStack
	 */
	protected void setCurrentSessionStack(Stack<Session> sessionStack) {
		sessionStackLocal.set(sessionStack);
	}

}
